import _ from 'lodash'

export default class PaginationFormat {
  /**
   * @desc 根据字典显示本来的意思
   */
  dict(data, IsMultiple, separator = ',') {
    return function(row, column, cellValue, index) {
      const content = row[column.property]
      if (content === 0 || content === false || content) {
        if (Object.prototype.toString.call(data) === '[object Object]') {
          if (IsMultiple) {
            const labelArr = []
            content.split(',').map((item, index) => {
              data.map((it, i) => {
                if (it.value === item) {
                  labelArr.push(it.label)
                }
              })
            })
            if (labelArr.length > 0) {
              return labelArr.join(separator)
            } else {
              return '--'
            }
          }

          const item = data[content]
          if (item === 0 || item === false || item) {
            return item
          }
          return '--'
        }

        if (Array.isArray(data)) {
          if (IsMultiple) {
            const labelArr = []
            content.split(',').map((item, index) => {
              data.map((it, i) => {
                if (it.value === item) {
                  labelArr.push(it.label)
                }
              })
            })
            if (labelArr.length > 0) {
              return labelArr.join(separator)
            } else {
              return '--'
            }
          }

          return data
            .filter((item) => item.value === '' + content)
            .map((item) => item.label)
            .join('')
        }

        return content
      }
      return '--'
    }
  }

  /**
   * @desc 根据字典显示本来的意思  是dict方法的重写
   */
  formatter(dicts, options) {
    options = {
      currentKey: 'value',
      showKey: 'label',
      division: ',',
      ...options
    }

    return function(row, column) {
      const rowData = row[column.property]
      if (_.isNil(dicts)) {
        if (rowData === '') {
          return '-'
        } else {
          return rowData
        }
      } else {
        if (rowData === '') {
          return '-'
        } else if (_.isNil(rowData)) {
          return '-'
        } else if (_.isArray(dicts)) {
          return _.chain(dicts)
            .filter((o) => _.includes(_.split(rowData, ','), ('' + o[options.currentKey])))
            .map(options.showKey)
            .join(options.division)
            .value()
        } else if (_.isObject(dicts)) {
          return _.chain(_.split(rowData, ','))
            .map(o => dicts[o])
            .join(options.division)
            .value()
        } else {
          return '-'
        }
      }
    }
  }
}
